﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;
using System.Data;
using System.Data.SqlClient;
using Crosland.Automotriz.Entidad;




namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsT_Tes_CajaDAO
    {

        private readonly AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();

        public bool Guardar(T_TES_CAJA entity, string glosa)
        {

            try
            {
                ContextoDeObjs.ExecuteStoreCommand("exec USP_SAVE_T_TES_CAJA @ID_BANCO_CUENTA={0}, @ID_TIPO_DOCUMENTO={1}, @NUM_OPERACION={2}, @FEC_OPERACION={3}, @ID_MONEDA={4}, @IMP_MONTO={5}, @ID_CLIENTE={6}, @ID_USUARIO={7},@DES_GLOSA={8},@IMP_TIPO_CAMBIO={9}", entity.ID_BANCO_CUENTA, entity.ID_TIPO_DOCUMENTO, entity.NUM_OPERACION, entity.FEC_OPERACION, entity.ID_MONEDA, entity.IMP_MONTO, entity.ID_CLIENTE, entity.ID_USUARIO, glosa, entity.IMP_TIPO_CAMBIO);
                return true;
            }
            catch (Exception)
            {

                return false;
            }

        }

        public IEnumerable<Object> BuscarDepositos(int anio, int mes, string usuario, int moneda, int estado)
        {

            try
            {
                IEnumerable<Object> Lista = new List<Object>();

                if (moneda == 0)
                {
                    if (estado == 0)
                    {
                        if (usuario == "0")
                        {
                            var q = from c in ContextoDeObjs.V_LISTAR_DEPOSITOS
                                    where c.FEC_OPERACION.Year == anio && c.FEC_OPERACION.Month == mes
                                    && c.SaldoDepositoSoles == 0 && c.SaldoDepositoDolar == 0
                                    orderby c.FEC_OPERACION descending
                                    select new
                                    {
                                        c.ID_OPERACION_CAJA,
                                        c.DES_CLIENTE,
                                        c.FEC_OPERACION,
                                        c.NOM_BANCO,
                                        c.NRO_CUENTA_CORRIENTE,
                                        c.NOM_MONEDA,
                                        c.IMP_MONTO,
                                        c.ImporteAplicadoDolar,
                                        c.ImporteAplicadoSoles,
                                        c.SaldoDepositoDolar,
                                        c.SaldoDepositoSoles,
                                        c.ID_CLIENTE,
                                        c.NUM_OPERACION,
                                        c.ID_TIPO_DOCUMENTO,
                                        c.DES_CLASE_FACTURA,
                                        c.IMP_TIPO_CAMBIO
                                        ,
                                        c.ID_MONEDA
                                    };
                            Lista = q.ToList();
                        }
                        else
                        {
                            var q = from c in ContextoDeObjs.V_LISTAR_DEPOSITOS
                                    where c.ID_USUARIO == usuario && c.FEC_OPERACION.Year == anio && c.FEC_OPERACION.Month == mes
                                    && c.SaldoDepositoDolar == 0 && c.SaldoDepositoSoles == 0
                                    orderby c.FEC_OPERACION descending
                                    select new
                                    {
                                        c.ID_OPERACION_CAJA,
                                        c.DES_CLIENTE,
                                        c.FEC_OPERACION,
                                        c.NOM_BANCO,
                                        c.NRO_CUENTA_CORRIENTE,
                                        c.NOM_MONEDA,
                                        c.IMP_MONTO,
                                        c.ImporteAplicadoDolar,
                                        c.ImporteAplicadoSoles,
                                        c.SaldoDepositoDolar,
                                        c.SaldoDepositoSoles,
                                        c.ID_CLIENTE,
                                        c.NUM_OPERACION,
                                        c.ID_TIPO_DOCUMENTO,
                                        c.DES_CLASE_FACTURA,
                                        c.IMP_TIPO_CAMBIO,
                                        c.ID_MONEDA
                                    };
                            Lista = q.ToList();
                        }

                    }
                    else
                    {
                        if (usuario == "0")
                        {
                            var q = from c in ContextoDeObjs.V_LISTAR_DEPOSITOS
                                    where c.FEC_OPERACION.Year == anio && c.FEC_OPERACION.Month == mes
                                    && c.SaldoDepositoDolar > 0 && c.SaldoDepositoSoles > 0
                                    orderby c.FEC_OPERACION descending
                                    select new
                                    {
                                        c.ID_OPERACION_CAJA,
                                        c.DES_CLIENTE,
                                        c.FEC_OPERACION,
                                        c.NOM_BANCO,
                                        c.NRO_CUENTA_CORRIENTE,
                                        c.NOM_MONEDA,
                                        c.IMP_MONTO,
                                        c.ImporteAplicadoDolar,
                                        c.ImporteAplicadoSoles,
                                        c.SaldoDepositoDolar,
                                        c.SaldoDepositoSoles,
                                        c.ID_CLIENTE,
                                        c.NUM_OPERACION,
                                        c.ID_TIPO_DOCUMENTO,
                                        c.DES_CLASE_FACTURA,
                                        c.IMP_TIPO_CAMBIO,
                                        c.ID_MONEDA
                                    };
                            Lista = q.ToList();
                        }
                        else
                        {
                            var q = from c in ContextoDeObjs.V_LISTAR_DEPOSITOS
                                    where c.ID_USUARIO == usuario && c.FEC_OPERACION.Year == anio && c.FEC_OPERACION.Month == mes
                                    && c.SaldoDepositoDolar > 0 && c.SaldoDepositoSoles > 0
                                    orderby c.FEC_OPERACION descending
                                    select new
                                    {
                                        c.ID_OPERACION_CAJA,
                                        c.DES_CLIENTE,
                                        c.FEC_OPERACION,
                                        c.NOM_BANCO,
                                        c.NRO_CUENTA_CORRIENTE,
                                        c.NOM_MONEDA,
                                        c.IMP_MONTO,
                                        c.ImporteAplicadoDolar,
                                        c.ImporteAplicadoSoles,
                                        c.SaldoDepositoDolar,
                                        c.SaldoDepositoSoles,
                                        c.ID_CLIENTE,
                                        c.NUM_OPERACION,
                                        c.ID_TIPO_DOCUMENTO,
                                        c.DES_CLASE_FACTURA,
                                        c.IMP_TIPO_CAMBIO,
                                        c.ID_MONEDA
                                    };
                            Lista = q.ToList();
                        }

                    }

                }
                else
                {
                    if (estado == 0)
                    {
                        if (usuario == "0")
                        {
                            var q = from c in ContextoDeObjs.V_LISTAR_DEPOSITOS
                                    where c.FEC_OPERACION.Year == anio && c.FEC_OPERACION.Month == mes
                                    && c.ID_MONEDA == moneda && c.SaldoDepositoDolar == 0 && c.SaldoDepositoSoles == 0
                                    orderby c.FEC_OPERACION descending
                                    select new
                                    {
                                        c.ID_OPERACION_CAJA,
                                        c.DES_CLIENTE,
                                        c.FEC_OPERACION,
                                        c.NOM_BANCO,
                                        c.NRO_CUENTA_CORRIENTE,
                                        c.NOM_MONEDA,
                                        c.IMP_MONTO,
                                        c.ImporteAplicadoDolar,
                                        c.ImporteAplicadoSoles,
                                        c.SaldoDepositoDolar,
                                        c.SaldoDepositoSoles,
                                        c.ID_CLIENTE,
                                        c.NUM_OPERACION,
                                        c.ID_TIPO_DOCUMENTO,
                                        c.DES_CLASE_FACTURA,
                                        c.IMP_TIPO_CAMBIO,
                                        c.ID_MONEDA
                                    };

                            Lista = q.ToList();
                        }
                        else
                        {
                            var q = from c in ContextoDeObjs.V_LISTAR_DEPOSITOS
                                    where c.ID_USUARIO == usuario && c.FEC_OPERACION.Year == anio && c.FEC_OPERACION.Month == mes
                                    && c.ID_MONEDA == moneda && c.SaldoDepositoDolar == 0 && c.SaldoDepositoSoles == 0
                                    orderby c.FEC_OPERACION descending
                                    select new
                                    {
                                        c.ID_OPERACION_CAJA,
                                        c.DES_CLIENTE,
                                        c.FEC_OPERACION,
                                        c.NOM_BANCO,
                                        c.NRO_CUENTA_CORRIENTE,
                                        c.NOM_MONEDA,
                                        c.IMP_MONTO,
                                        c.ImporteAplicadoDolar,
                                        c.ImporteAplicadoSoles,
                                        c.SaldoDepositoDolar,
                                        c.SaldoDepositoSoles,
                                        c.ID_CLIENTE,
                                        c.NUM_OPERACION,
                                        c.ID_TIPO_DOCUMENTO,
                                        c.DES_CLASE_FACTURA,
                                        c.IMP_TIPO_CAMBIO,
                                        c.ID_MONEDA
                                    };

                            Lista = q.ToList();
                        }


                    }
                    else
                    {
                        if (usuario == "0")
                        {
                            var q = from c in ContextoDeObjs.V_LISTAR_DEPOSITOS
                                    where c.FEC_OPERACION.Year == anio && c.FEC_OPERACION.Month == mes
                                    && c.ID_MONEDA == moneda && c.SaldoDepositoDolar > 0 && c.SaldoDepositoSoles > 0
                                    orderby c.FEC_OPERACION descending
                                    select new
                                    {
                                        c.ID_OPERACION_CAJA,
                                        c.DES_CLIENTE,
                                        c.FEC_OPERACION,
                                        c.NOM_BANCO,
                                        c.NRO_CUENTA_CORRIENTE,
                                        c.NOM_MONEDA,
                                        c.IMP_MONTO,
                                        c.ImporteAplicadoDolar,
                                        c.ImporteAplicadoSoles,
                                        c.SaldoDepositoDolar,
                                        c.SaldoDepositoSoles,
                                        c.ID_CLIENTE,
                                        c.NUM_OPERACION,
                                        c.ID_TIPO_DOCUMENTO,
                                        c.DES_CLASE_FACTURA,
                                        c.IMP_TIPO_CAMBIO,
                                        c.ID_MONEDA
                                    };

                            Lista = q.ToList();
                        }
                        else
                        {
                            var q = from c in ContextoDeObjs.V_LISTAR_DEPOSITOS
                                    where c.ID_USUARIO == usuario && c.FEC_OPERACION.Year == anio && c.FEC_OPERACION.Month == mes
                                    && c.ID_MONEDA == moneda && c.SaldoDepositoDolar > 0 && c.SaldoDepositoSoles > 0
                                    orderby c.FEC_OPERACION descending
                                    select new
                                    {
                                        c.ID_OPERACION_CAJA,
                                        c.DES_CLIENTE,
                                        c.FEC_OPERACION,
                                        c.NOM_BANCO,
                                        c.NRO_CUENTA_CORRIENTE,
                                        c.NOM_MONEDA,
                                        c.IMP_MONTO,
                                        c.ImporteAplicadoDolar,
                                        c.ImporteAplicadoSoles,
                                        c.SaldoDepositoDolar,
                                        c.SaldoDepositoSoles,
                                        c.ID_CLIENTE,
                                        c.NUM_OPERACION,
                                        c.ID_TIPO_DOCUMENTO,
                                        c.DES_CLASE_FACTURA,
                                        c.IMP_TIPO_CAMBIO,
                                        c.ID_MONEDA
                                    };

                            Lista = q.ToList();
                        }

                    }

                }
                return Lista;

            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        public IEnumerable<Object> SeleccionDepositos(List<int> id)
        {

            try
            {

                IEnumerable<Object> Lista = new List<Object>();

                var q = from c in ContextoDeObjs.T_TES_CAJA
                        join m in ContextoDeObjs.T_MAE_MONEDA
                        on c.ID_MONEDA equals m.ID_MONEDA
                        join d in ContextoDeObjs.TD_CLIENTE
                        on c.ID_CLIENTE equals d.ID_CLIENTE
                        join b in ContextoDeObjs.T_MAE_BANCO_CUENTA
                        on c.ID_BANCO_CUENTA equals b.ID_BANCO_CUENTA
                        join ba in ContextoDeObjs.T_MAE_BANCO
                        on b.ID_BANCO equals ba.ID_BANCO
                        where id.Contains(c.ID_OPERACION_CAJA)
                        select new
                        {
                            d.DES_CLIENTE,
                            c.ID_CLIENTE,
                            IMP_MONTO = c.IMP_MONTO,
                            NOM_MONEDA = m.NOM_MONEDA,
                            Saldo = c.IMP_MONTO,
                            BANCO = ba.NOM_BANCO,
                            CTA = b.NRO_CUENTA_CORRIENTE,
                            c.FEC_OPERACION
                        };

                Lista = q.ToList();

                return Lista;

            }
            catch (Exception)
            {
                return null;
            }

        }

        public List<T_TES_CAJA> BuscarDepositoGetById(int id)
        {
            List<T_TES_CAJA> lista = new List<T_TES_CAJA>();

            var q = from c in ContextoDeObjs.T_TES_CAJA
                    where c.ID_OPERACION_CAJA == id
                    select c;

            lista = q.ToList();

            return lista;

        }

        public decimal TipoCambio(DateTime FecOperacion)
        {
            decimal tipoCambio = 0;

            if ((from c in ContextoDeObjs.T_MAE_TIPO_CAMBIO where c.FEC_CAMBIO == FecOperacion select c).Count() > 0)
            {
                tipoCambio = Convert.ToDecimal((from c in ContextoDeObjs.T_MAE_TIPO_CAMBIO where c.FEC_CAMBIO == FecOperacion  && c.ID_MONEDA_REF==1  select c).Single().IMP_VENTA);
            }
            else
            {
                tipoCambio = 0;
            }

            return tipoCambio;

        }


    }
}
